package jp.syuriken.snsw.terenaibot;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * tbotsys-core のバージョン情報を格納するクラスです。
 * 
 * @author $Author$
 */
public final class VersionInfo {
	
	/** バージョン情報が格納されたファイルのResourceBundle */
	public static final ResourceBundle VERSION_INFO_RESOURCE = ResourceBundle
		.getBundle("jp.syuriken.snsw.terenaibot.tbotsys-core-version");
	
	/** 情報が取得できなかった時の文字列 */
	public static final String UNKNOWN_STRING = "<unknown>";
	

	/**
	 * Artifact IDを返す
	 * 
	 * @return Artifact ID
	 */
	public static String getArtifactId() {
		return getString("pom.artifactId");
	}
	
	/**
	 * Artifact Nameを返す
	 * 
	 * @return ArtifactName
	 */
	public static String getArtifactName() {
		return getString("pom.name");
	}
	
	/**
	 * ビルドのもととなったsvn revisionを返す
	 * 
	 * @return revision
	 */
	public static String getCommittedRevision() {
		return getString("svn.committedRevision");
	}
	
	private static String getString(String key) {
		try {
			return VERSION_INFO_RESOURCE.getString(key);
		} catch (MissingResourceException e) {
			return UNKNOWN_STRING;
		}
	}
	
	/**
	 * サポートURLを返す
	 * 
	 * @return サポートURL
	 */
	public static String getSupportUrl() {
		return getString("pom.url");
	}
	
	/**
	 * 一意なバージョンを返す。
	 * 
	 * @return 一意なバージョン
	 */
	public static String getUniqueVersion() {
		String version = getVersion();
		String revision = getCommittedRevision();
		if (version.equals(UNKNOWN_STRING)) {
			return revision;
		} else if (version.endsWith("-SNAPSHOT")) {
			if (revision.equals(UNKNOWN_STRING)) {
				return version;
			} else {
				StringBuilder sb = new StringBuilder();
				sb.append(version);
				sb.append(".");
				sb.append(getCommittedRevision());
				return sb.toString();
			}
		}
		return version;
	}
	
	/**
	 * pom.xml に記述されたバージョンを返す
	 * 
	 * @return バージョン
	 */
	public static String getVersion() {
		return VERSION_INFO_RESOURCE.getString("pom.version");
	}
	
	private VersionInfo() {
	}
}
